package org.eliza.base.basicx.datatypex

import kotlin.random.Random


/// 数组
// 数组用类 Array 实现，并且还有一个 size 属性及 get 和 set 方法，由于使用 [] 重载了 get 和 set 方法，
// 所以我们可以通过下标很方便的获取或者设置数组对应位置的值。
// 数组的创建两种方式：一种是使用函数arrayOf()；另外一种是使用工厂函数。如下所示，我们分别是两种方式创建了两个数组：
private fun basic() {
    val aChar = arrayOf<Int>()
    val bChar = Array(3) { 0 }
// 注意: 与 Java 不同的是，Kotlin 中数组是不协变的（invariant）。
    val cChar = ShortArray(3) { 0 } //直接提供类型，省去了装箱操作

}

private fun join() {
    println("=====metjionhod=====")
    val aChar: String = "abcd"
//    只要表达式中的第一个元素是字符串
    println("aaa" + 1)
//    println(1+"aaa" ) //err
}

private fun method() {
    println("=====method=====")
    val aChar: String = "abcdefg"
    println("str.plus a                   :${aChar.plus("a")}")
    println("str.get 0                    :${aChar.get(0)}")
    println("str.subSequence 0..2         :${aChar.subSequence(0..2)}")
    println("str.compareTo a              :${aChar.compareTo("a")}")
    println("str.equals a                 :${aChar.equals("a")}")
    println("str.length                   :${aChar.length}")
    println("str.rangeUntil a             :${aChar.rangeUntil("abcdefg")}")
    println("str.rangeUntil a             :${aChar.rangeUntil("a")}")
    println("str.rangeTo a                :${aChar.rangeTo("a")}")
    println("str.codePointCount a         :${aChar.codePointCount(1, aChar.length)}")

    println("str.random a                 :${aChar.random()}")
    println("str.randomOrNull a           :${aChar.randomOrNull(Random.Default)}")
    println("str.toCharArray            :${aChar.toCharArray()}")
    println("str.toCharArray 0..3           :${aChar.toCharArray(0, 3).joinToString()}")
    println(
        "str.toCharArray a           :${
            aChar.toCharArray(CharArray(aChar.length), 0, 1, aChar.length).joinToString()
        }"
    )
}

private  fun main() {

    method()
}